package com.szrt.java.day20161227.demo07;

/**
 * 工具类
 * 技巧： 贪多x不栏
 * 
 * 你写1个方法 就要测试一个方法。一个一个地来。
 *
 */
public class ArrayUtil {
	
	
	/**
	 *  如果找不到这个数  -1
	 * 	已知： 
	 *  	1 有1个数组 olds
	 *  	2 有1个要查找的数字   9
	 *  
	 *  求：要查找的数字 比如 9 所在的下标 3
	 *  
	 *  分析：循环整个数组olds  获取到一个具体的值  根据找打的值和 9比较 
	 *  	 相同：找到了。  结束循环
	 *  	 不同： 接着往下找
	 *  
	 *  方法的设计
	 * 
	 * 
	 */
	public static int query(int[] array,int search){
		int targetIndex=-1;
		//循环整个数组olds
		for(int index=0;index<array.length;index++){
			//获取到一个具体的值
			int value = array[index];
			
			if(value == search){
				//找到了
				targetIndex = index;
				//System.out.println(targetIndex);
				break;
			}
		}
		return targetIndex;
	}
	
	
	/**
	 * 已知：
	 * 	1： 数组 array
	 * 	2：被修改的数   oldData
	 *  3：修改之后的数 newData
	 *  
	 * 求：
	 * 	修改之后的数组
	 * 
	 * 	分析如何做到
	 * 	
	 * 
	 */
	public static int[] update(int[] array,int oldData,int newData){
		
		//1 找到元素oldData 所在的下标
		int index=query(array,oldData);
		
		//2修改下标为3所在的这个元素的值为newData
		array[index]=newData;

		return array;
	}
	
	
	/**
	 * 
	 * 删除
	 * 	已知： 
	 * 		1： 原来的数组
	 * 		2： 被删除的数
	 * 
	 * 	求：
	 * 	删除制定的数据之后的新的数组  //规矩：数组的长度一旦确定，不能修改 
	 * 
	 * 思路：
	 * 
	 *  0: 创建1个数组  数组长度是原来数组的长度-1
	 * 	1：获取 被删除的数 的下标 index
	 * 	2：以下标为基准 把 原来的数组 分为2部分
	 * 		2.1 如果在index之前   原样复制到  新的数组中
	 * 		2.1 如果在index之后   把index-1 再复制
	 *  3：返回新的数组
	 * 		
	 * 
	 */
	public static int[] delete(int[] oldArray,int deleteData){
		
		int length = oldArray.length;
		int[] newArray = new int[length-1];
		
		//1：获取 被删除的数 的下标 index
		int index =query(oldArray,deleteData);
		
		//2:以下标为基准 把 原来的数组oldArray 分为2部分  循环原来的数组
		//2.1 如果在index之前   原样复制到  新的数组中
		for(int i=0;i<index;i++){
			int v = oldArray[i];
			newArray[i]=v;
		}
		
		//2.1 如果在index之后   把index-1 再复制
		for(int i=index+1;i<length;i++){
			int v = oldArray[i];
			newArray[i-1]=v;
		}
		return newArray;
	}

}
